a tool for shared writing and social publishing
at feature/backdate 39 lines 1.2 kB view raw
1import { z } from "zod"; 2import { makeRoute } from "../lib"; 3import type { Env } from "./route"; 4import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 5 6export type SearchPublicationNamesReturnType = Awaited< 7 ReturnType<(typeof search_publication_names)["handler"]> 8>; 9 10export const search_publication_names = makeRoute({ 11 route: "search_publication_names", 12 input: z.object({ 13 query: z.string(), 14 limit: z.number().optional().default(10), 15 }), 16 handler: async ({ query, limit }, { supabase }: Pick<Env, "supabase">) => { 17 // Search publications by name in record (case-insensitive partial match) 18 const { data: publications, error } = await supabase 19 .from("publications") 20 .select("uri, record") 21 .ilike("record->>name", `%${query}%`) 22 .limit(limit); 23 24 if (error) { 25 throw new Error(`Failed to search publications: ${error.message}`); 26 } 27 28 const result = publications.map((p) => { 29 const record = p.record as { name?: string }; 30 return { 31 uri: p.uri, 32 name: record.name || "Untitled", 33 url: getPublicationURL(p), 34 }; 35 }); 36 37 return { result: { publications: result } }; 38 }, 39});